/**

给你一棵根为 root 的二叉树，请你返回二叉树中好节点的数目。

「好节点」X 定义为：从根到该节点 X 所经过的节点中，没有任何节点的值大于 X 的值。

输入：root = [3,1,4,3,null,1,5]
输出：4
解释：图中蓝色节点为好节点。
根节点 (3) 永远是个好节点。
节点 4 -> (3,4) 是路径中的最大值。
节点 5 -> (3,4,5) 是路径中的最大值。
节点 3 -> (3,1,3) 是路径中的最大值。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/count-good-nodes-in-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    void travel_Pre(TreeNode* node ,int & sum,int maxValueofPath)
    {
        if(node == 0)
            return ;
        
        //path.push_back(node->val);
        if(maxValueofPath <= node->val)
        {
            sum++;
            maxValueofPath = node->val;
        }
        
        if(node->left)
        {
            travel_Pre(node->left,sum, maxValueofPath);
            //path.pop_back();
        }
        if(node->right)
        {
            travel_Pre(node->right,sum, maxValueofPath);
            //path.pop_back();
        }
    }
    int goodNodes(TreeNode* root) {
        //vector<int> path;
        int sum = 0;
        int maxValueofPath = INT_MIN;
        travel_Pre(root,sum,maxValueofPath);
        return sum;
    }
};